C语言之scanf和gets在字符串输入时遇到空格?

您所在的位置:网站首页 scanf 输入字符串数组 C语言之scanf和gets在字符串输入时遇到空格?

C语言之scanf和gets在字符串输入时遇到空格?

2024-07-16 04:49| 来源: 网络整理| 查看: 265

生活中,字符和字符串无处不见。当你输入带空格的一段字符串时,比如:“I love you”。如果你用scanf输入,语句应该是这样的:

char str[100]; scanf("%s",str);

而你得到的结果却是

I

由此,我们可以断定,scanf遇到空格就停止读入了。 那么我们应该如何解决这个问题呢? 我们有两种解决方法。 第一种:用gets函数

char str[100]; gets(str);

得到的结果如下:

I love you

因为gets可以读入空格,遇到回车才会停止,gets对末尾回车符的处理是接收回车并把回车替换为\0;而scanf遇到空格、回车和Tab键都会认为输入结束,所以它是不能接收空格的。 第二种方法:要用到一个格式字符:%[] -->一个字符集。

char str[100]; scanf("%[^\n]",str);直到输入回车键,读取才结束,当然不能超过a定义的大小,否则会出错。此命令与gets(str)效果一样。

得到的结果如下:

I love you

C语言中scanf()函数提供的“%[]”格式串可以用来进行多个字符的输入,并对结束符进行自定义。对于%[]还可以用^+任意字符(包括 EOF)来结束字符串的输入,如%[^EOF]就是直到有EOF 输入,字符串才中止。 举个例子:

char str[100]; scanf("%[^EOF]",str);

你可以输入很多个字符串,直到输入EOF结束。虽然格式不一样,但最后得到的结果都是一样的。 如果要你输入a和b两个字符,用下面的语句能得到吗?

#include int main() { char a,b; scanf("%c",&a); scanf("%c",&b); printf("%c,%c",a,b); return 0; }

很明显,这里是得不到a和b的,得到的结果如下所示:

a,

这是为什么呢? 原因主要就是在输入空格(回车or tab键)的时候,scanf遇到空格(回车or tab键)就认为输入结束。所以我们这里可以采用getchar();把空格(回车or tab键)吃掉,这样scanf输入的时候,只会碰到最后的回车才结束。

#include int main() { char a,b; scanf("%c",&a); getchar(); scanf("%c",&b); printf("%c,%c",a,b); return 0; }

我们也可以采用下面的方法进行操作:

char str[100]; scanf("%[^\n]%*c",str);///遇到回车符就认为输入结束 printf("%s",str);

总结 这些知识点虽然非常小,但是却非常实用。比如,你做一个学生成绩管理系统,当你输入学生性别的时候,或许就会考虑到字符或者字符串的输入问题。细节决定成败!抓住了每一个小细节,你离成功又进了一步!加油吧,骚年!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3